Приложение Маяки Эстонии
30 Декабря

Отчётная и итоговая для этого года публикация о разработке приложения "Маяки России". Планировал до конца года поработать только над интерфейсом, но тесное общение с помогающим мне дизайнером-волонтёром (Артём, спасибо тебе ещё раз), расширило спектр моих работ. Самым серъёзным нововведением стала страница поиска по всем маякам. Это очень нужная функция для тех, кто хочет найти маяк, но не уверен, в каком регионе он находится. Из более мелких исправлений: фильтр "все маяки/мои маяки" в списке маяков региона, полная переработка логики кнопки "назад", добавление региона в табличку данных о маяке. Последнее сделано для того, чтобы лучше понимать, о каком маяке речь, если пользователь попал на эту страницу из поиска или из "моих маяков". Ещё полностью переработана страница выбора региона. Это первое, что видит пользователь при запуске приложения и она должна выглядеть максимально привлекательно.

Приложение "Маяки России"

Ещё была решена старая проблема с высотой раскрытого верхнего блока на странице списка маяков. В зависимости от ширины экрана устройства и длины названия, текст там может занимать от двух до четырёх строк, при этом, высоту надо чётко задавать в самом начале. Решение в лучших традициях костылестроения нашёл на StackOverflow: ещё до начала отрисовки я создаю блок нужной ширины с текстом заголовка и замеряю его высоту, блок этот нигде не отображается, а высота передаётся дальше и используется при отрисовке.

Приложение "Маяки России"

Ну и немного цифр. Сейчас в приложении 115 маяков и 343 фотографии - отличный результат для четырёх месяцев работы. Я до сих пор не могу определиться с релизом. С одной стороны, всё, что надо, уже готово и можно выпускаться. С другой - пока добавлено около трети запланированного контента, большинство регионов отсутствует. Я опасаюсь, что не все отнесутся к этому с пониманием и приложение нахватает низких оценок, что весьма нежелательно. В общем, надо думать.

Вас же я призываю устанавливать новую версию приложения (если у вас Андроид) и писать свои комментарии и пожелания в Телеграме. Ссылка на канал теперь есть в главном меню приложения. И хороших вам праздников!

22 Декабря

Продолжаю рассказ о разработке приложения "Маяки России". Вчерашняя публикация носила несколько деструктивный характер: то не прижилось, это реализовать не получилось. Сегодня всё наоборот и первое, с чего надо начать - функционал приложения (каким я его изначально задумывал) готов полностью. А вот с дизайном и UI ещё точно надо поработать.

Большая часть приложения, работу над которой я завершил сегодня - "Мои маяки". Это избранное, где пользователь может сохранять для себя маяки из приложения. На странице каждого маяка есть кнопка, которая позволяет добавить этот маяк в избранное или убрать оттуда. Также это можно сделать долгим нажатием прямо на странице списка маяков. На самой странице "Мои маяки" находится, собственно, список отмеченных маяков. Также там можно по-тиндеровски смахнуть маяк вправо и он будет удалён из списка. Теперь у меня есть железобетонное оправдание перед женой, зачем я ставил Tinder.

На разработку всего этого функционала у меня ушло 8-9 часов, результатом я крайне доволен. Для скачивания данная версия пока не доступна, как писал выше, надо поработать с интерфейсом.

21 Декабря

О приложении "Маяки России" не писал больше полутора месяцев, самое время. Много добавил контента, но об этом напишу отдельно в отчётной публикации, сейчас же именно разработка. Ей в чистом виде я уделял времени куда меньше, чем контенту. На этой неделе переключился на неё и... многое пришлось переделывать.

Чтобы в плане интерфейса не делать клон своего предыдущего приложения, я решил делать меню не привычное, открывающееся по иконке-"гамбургеру", а на специальной плашке внизу. Достаточно быстро я столкнулся с проблемой, когда все кнопки с подписями просто не помещаются. Вышел из положения так: на каждой странице ненужные кнопки скрываются. В последнее время нередко приходится делать так на сайтах и у меня двоякое отношение к этому способу. С одной стороны, удобнее, а с другой - пользователь очень не любит, когда решают за него и может воспринимать это негативно. В случае с приложением и это не помогло - с увеличением функционала кнопки всё равно перестали помещаться. В итоге сегодня пришлось делать меню "по классике".

Приложение "Маяки России"

Ещё одна идея, которая не прижилась, связана с картой. Напомню, карта показывает выбранный регион (общей карты всей России нет и не планируется) и маяки в нём. В какой-то момент мне подумалось, что можно было бы загружать вообще маяки, но показывать карту, как и раньше. То есть пользователь видит выбранный регион и его маяки, но если перемещает карту в любое другое место, маяки там отображаются тоже. На практике всё оказалось не так хорошо. Пользователь нажимает на маркер, не относящийся к выбранному региону и переходит на страницу маяка, затем возвращается назад на карту и переключается на список маяков выбранного региона - только что просмотренного маяка там не будет, так как он относится к другому региону. Другой случай: для регионов "Приморье" и "Сахалин и курильские острова" будет отображаться примерно один участок карты, только в одном случае будут материковые маяки, а в другом - островные. Если показывать все маркеры, то пользователь сразу, не двигая карту будет видеть в два раза больше маяков, чем было в списке. Всё это будет для пользователя непонятным и неочевидным, а значит, опять-таки, приведёт к негативному восприятию.

Короче, что ни строчка кода - то шаг с совершенству.

12 Ноября

Не писал новостей на эту тему с начала октября, и могло сложиться ощущение, что приложением я совсем не занимаюсь. Для "Маяков России" я закончил добавлять информацию о маяках, количество которых увеличилось с 45 до 49. Фотографии добавлены для 30 маяков и больше у меня нет. Хочется надеяться, что добуду ещё. Начал добавлять тексты не своего написания о маяках и знаках Ладоги. На этом этапе пришлось сделать паузу и переключиться на "Маяки Прибалтики".

Ещё в самом начале, когда приложение называлось "Маяки Эстонии", мне очень хотелось наглядно показать сектора работы маяков, как это сделано у нас на сайте Navigatsioonimärkide nimekiri. Чтож, я перевыполнил задание! У меня это ещё и с анимацией.

Необязательные технические подробности: изображения секторов не являются заранее заготовленными картинками, а рисуются непосредственно в приложении по указанным характеристикам огня. Пришлось добавлять много новых данных и в какой-то момент я столкнулся с проблемой. Маяки Эстонии добавились без проблем, сектора соответствовали действительности, проверить не сложно. А вот первый же латвийский маяк явно светил вглубь берега. Оказалось, в официальных источниках всех трёх стран система координат (точнее положение 0 градусов) отличается. Более того, в двух латвийских официальных источниках сектора некоторых маяков не совпадают. Пришлось всё подгонять под "эстонский" формат, когда 0 градусов совпадает с 6 часами на циферблате часов и именно в этой системе они и отображаются в приложении, в разделе "Сектора и режимы огня". Всё это заняло 3-4 десятка часов работы. Также добавил новый маяк - Клайпедский передний. Ну и ещё одна старая задумка - изображения карт с указание маршрута до самых труднодоступных маяков. Для примера: комфортную дорогу до самого подножья заднего маяка Паралепа я нашёл лишь на свой четвёртый визит к нему.

Приложение "Маяки Эстонии" Приложение "Маяки Эстонии"

После некоторого количества обязательных технических проблем, стабильная версия приложения была выпущена. В Play Market она была доступна ещё вчера, в AppGallery она на рассмотрении, AppStore тоже в процессе. Отличное большое обновление, которым я горжусь и после которого технически уже и добавить-то нечего.

1 Октября

Ещё немного дневников разработчика приложения "Маяки России". Самое главное, о чём я сейчас расскажу, это статус проекта в целом. Но сначала немного о кэшировании. В "Маяках Прибалтики" все данные хранятся локально и кэшировать попросту нечего. В новом приложении все данные из интернета и надо а) дать возможность пользователю использовать приложение без интернета и б) несколько сократить передачу данных. Насколько я понял ситуацию, есть два способа: обычное кэширование и скачивание файлов с данными, то есть, что-то вроде offline-версии приложения. Первый способ комбинирует хранение данных и при этом их обновление, но имеет один недостаток - кэшем в первую очередь управляет ОС и нежданно-негаданно для пользователя она может этот кэш удалить. По умолчанию кэш хранится 30 дней, но из своей практики пользователя смартфона скажу, что вообще ни разу не имел проблем с нежелательно удалённым кэшем. Возможно, имеется в виду 30 дней, когда приложение ни разу не запускалось.

Теперь второй способ. У него есть один плюс: ОС не удалит файлы в тайне от пользователя. Больше плюсов нет. Никакой системы обновления данных тут не предусмотрено, так что, в любом случае, надо как-то комбинировать это с кэшем, а ещё придётся запрашивать у пользователя разрешение на использование памяти смартфона.

Очевидно, что первый способ - мой выбор. Так что я вторгся на совершенно новую для себя территорию и начал затачивать лапки под кэширование. Оказалось, во Flutter всё уже есть "из коробки", просто работать с этим удобнее через плагины. Для кэширования данных я использую flutter_cache_manager, а для фотографий - cached_network_image. Просто и очень удобно! Фактически всё делается само и я не должен думать где хранить, как хранить, как называть, как и когда обновлять. Важный нюанс - сама логика кэша. Это локальное сохранение получаемых данных. На практике это выливается в то, что без интернета будут доступны лишь те данные и фото, которые пользователь уже просматривал. То есть, если установить приложение, и запустить его в первый раз без интернета, никаких данных не будет. Также не будет данных, если без интернета попробовать открыть какой-то маяк или регион, который ранее не просматривался. Но в любом случае, я очень доволен тем, как это работает.

Совершенно отдельный вопрос - кэширование карты. Поизучав этот вопрос, я узнал, что в Mapbox можно скачивать и использовать локально хранящиеся тайлы карты. Если сделать соответствующую функцию, то пользователи приложения меня разорят, так как в месяц бесплатно можно качать определённое количество тайлов, а за остальные мне надо платить. Другой вопрос, что и не нужна такая функция, потому что Mapbox и так кэширует векторные карты. Это легко проверить в "Маяках Прибалтики", если удалить весь кэш приложения, открыть его и перейти там на карту, ничего не приближая (её первоначальный вид). После этого поставить режим "в самолёте" и открыть приложение заново. Теперь можно приближать, удалять и двигать, и будет хорошо видно, что закэшировано и с какой детализацией. Также, если какой-то из участков карты приближался и скачивались его более детализованные данные, они тоже кэшируются. Короче, очень неглупые люди API для Mapbox делали.

Теперь самое главное - статус проекта. В приложении готово всё, кроме карты. Возможно, будут какие-то косметические правки. Например, я не очень уверен в цветовой гамме, но я также понимаю, что это нездоровый перфекционизм. Карта в приложение не добавлена из-за Null safety. Последний официальный релиз плагина вышел давно (что само по себе плохой знак) и этот стандарт не поддерживает. Варианта два: либо отказаться от Null safety во всём приложении, либо использовать dev-версию карт, которая это поддерживает, но с которой на практике я так и не смог подружиться. Короче, есть причины оставить внедрение карты на самый последний момент.

На этом хорошие новости заканчиваются, потому что помимо программирования есть ещё и контент. Немного цифр. Тексты о маяках Эстонии я писал полтора года для сайта и потом пару месяцев переносил их и фотографии в приложение, это порядка 60 маяков. Тексты о маяках Латвии и Литвы писались полгода сразу на сайт и для приложения. В "Маяках России" самих маяков будет в 3-4 раза больше, чем в прибалтийском приложении. Я поставил себе цель писать по три текста в день. Мой 3d-принтер покрылся толстым слоем пыли, к эпоксидке я не прикасался больше месяца, а последняя поделка (второй экземпляр Таллиннского верхнего маяка в масштабе 1:500) так и стоит не доделанная. При этом, только в очень редкие дни я выполняю свой план и постоянно живу с ощущением, что я что-то кому-то должен. Это давит. Очевидно, план надо снижать, я уже готовлю себя к мысли, что в этом году релиза не будет. Более того, с фотографиями всё совсем вышло из-под контроля. То, что начиналось очень хорошо, скатилось в канаву: из всех людей, кто согласился помочь своими фотографиями, снимки прислали 12 человек, а это менее половины. Те, которые прислали, вы самые лучшие, спасибо вам огромнейшее! Остальным я пытался напоминать, кто-то отказывался от участия в проекте, кто-то игнорит, кто-то переходит на агрессию, мол, вообще не до меня. В итоге, сейчас я вообще не занимаюсь поиском фотографий.

Ладно, ныть мы все умеем, а что по существу? По существу, полностью готов регион Калининградской области (11 маяков), но нет фотографий к одному из маяков (Гвардейский). В Инстаграме я их нашёл, но получить не удалось. Следующий регион, Сахалин и Курилы - всего 45 маяков, из которых сейчас написаны тексты для 35, фотографии вообще не подготовлены. На следующей неделе необходимо его закончить. Дальше надо будет делать самые популярные регионы: Финский залив, Ладога, Онега, Белое и Баренцево моря. После этого, в теории, можно выпускать приложение и после этого добавлять остальные данные. Ещё есть идея - после релиза запустить открытый канал в Телеграме для обсуждения приложения. Такой вот роадмап.

Цитировать
в комментарии